// 使用 rollup 配置

// 第一步：引入相关依赖
import { createRequire } from 'node:module'
import ts from "rollup-plugin-typescript2"
import json from "@rollup/plugin-json";
import nodeResolve from "@rollup/plugin-node-resolve";
import path from 'path'
import { fileURLToPath } from "url"

// 在 type: module 模块下使用 require 方法
const require = createRequire(import.meta.url)

// 第二部：获取文件路径
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const packagesDir = path.resolve(__dirname, 'packages')

// 2.1 获取需要打包的包
const packageDir = path.resolve(packagesDir, process.env.TARGET)
// console.log(packageDir, 3333);

// 2.2 获取每个webpack 下的 package.json 文件
const resolve = p => path.resolve(packageDir, p)
const pkg = require(resolve('package.json'))
// 获取 package.json 的自定义的文件打包格式
const packageOptions = pkg.buildOptions || {}
// console.log(packageOptions, 4444);
const name = path.basename(packageDir)

// 2.3 创建一个映射表处理打包之后生成的文件名
const outputConfigs = {
    'esm-bundler': {
        file: resolve(`dist/${name}.esm-bundler.js`),
        format: 'es'
    },
    'cjs': {
        file: resolve(`dist/${name}.cjs.js`),
        format: 'cjs'
    },
    'global': { // 处理全局
        file: resolve(`dist/${name}.global.js`),
        format: 'iife' // 表示立即执行
    },
}

// 定义生产 rollup 的配置方法
const createConfig = (format, output) => {
    // 进行打包
    output.name = packageOptions.name
    output.sourcemap = true
    // 生产 rollup 配置
    return {
        input: resolve('src/index.ts'), // 导入各个package下的入口文件
        output,
        plugins: [
            json(),
            ts({ // 解析 ts
                tsconfig: path.resolve(__dirname, 'tsconfig.json')
            }),
            nodeResolve() // 解析第三方插件
        ]
    }
}

// 遍历生产 rollup 的配置
const result = packageOptions.formats.map(format => createConfig(format, outputConfigs[format]))

export default result
